package com.canaan.business.service.bill;

import com.canaan.business.domain.bill.AdjustOutBill;
import com.canaan.business.domain.vo.AdjustOutBillExportVo;
import com.canaan.business.domain.vo.AdjustOutBillForPrintVo;
import com.canaan.business.domain.vo.OutStockQueryVo;
import com.canaan.business.domain.vo.OutStockResultVo;

import java.util.List;

/**
 * 调拔出库单Service接口
 *
 * @author ruoyi
 * @date 2023-02-01
 */
public interface IAdjustOutBillService {
    /**
     * 查询调拔出库单
     *
     * @param id 调拔出库单主键
     * @return 调拔出库单
     */
    AdjustOutBill selectAdjustOutBillById(Long id);

    /**
     * 查询调拔出库单列表
     *
     * @param adjustOutBill 调拔出库单
     * @return 调拔出库单集合
     */
    List<AdjustOutBill> selectAdjustOutBillListPageDatas(AdjustOutBill adjustOutBill);

    /**
     * 查询调拔出库单列表
     *
     * @param adjustOutBill 调拔出库单
     * @return 调拔出库单集合
     */
    List<AdjustOutBill> selectAdjustOutBillList(AdjustOutBill adjustOutBill);

    /**
     * 新增调拔出库单
     *
     * @param adjustOutBill 调拔出库单
     * @return 结果
     */
    int insertAdjustOutBill(AdjustOutBill adjustOutBill);

    /**
     * 批量新增调拔出库单
     *
     * @param adjustOutBillList 调拔出库单列表
     * @return 结果
     */
    int batchInsertAdjustOutBill(List<AdjustOutBill> adjustOutBillList);

    /**
     * 修改调拔出库单
     *
     * @param adjustOutBill 调拔出库单
     * @return 结果
     */
    int updateAdjustOutBill(AdjustOutBill adjustOutBill);

    /**
     * 批量修改调拔出库单
     *
     * @param adjustOutBillList 调拔出库单列表
     * @return 结果
     */
    int batchUpdateAdjustOutBill(List<AdjustOutBill> adjustOutBillList);

    /**
     * 批量删除调拔出库单
     *
     * @param ids 需要删除的调拔出库单主键集合
     * @return 结果
     */
    int deleteAdjustOutBillByIds(Long[] ids);

    /**
     * 删除调拔出库单信息
     *
     * @param id 调拔出库单主键
     * @return 结果
     */
    int deleteAdjustOutBillById(Long id);

    /**
     * 查询调拔出库单
     *
     * @param no 编号
     * @return 调拔出库单
     */
    AdjustOutBill selectAdjustOutBillByNo(String no);

    /**
     * 批量删除调拔出库单
     *
     * @param nos 需要删除的编号集合
     * @return 结果
     */
    int deleteAdjustOutBillByNos(String[] nos);

    /**
     * 删除调拔出库单信息
     *
     * @param no 编号
     * @return 结果
     */
    int deleteAdjustOutBillByNo(String no);

    int complete(List<Long> ids);

    int confirm(List<Long> ids);

    List<AdjustOutBillExportVo> exportList(AdjustOutBill adjustOutBill);

    List<String> importExcel(List<AdjustOutBillExportVo> list);

    int cancel(List<Long> ids);

    /**
     * 确认取消
     * @param bill 单据信息
     * @return 结果
     */
    int confirmCancel(AdjustOutBill bill);
    /**
     * 解析出库
     */
    OutStockResultVo analyseOutStock(OutStockQueryVo outStockQueryVo);

    /**
     * 处理预出库的单据
     */
    OutStockResultVo handlePreOutStockBill(String billNo,Integer billType,String address);
    /**
     * 入库回调
     */
    void postOutStockCallback(String billNo,String stockStatus);

    /**
     * 打印调拨出库单
     * @param no
     * @return
     */
    AdjustOutBillForPrintVo selectAdjustOutBillForPrint(String no);
}
